package com.doctcloud.common.webservice.exception;

import com.doctcloud.common.core.exception.base.BaseException;

/**
 * WebService调用异常
 * @author doctcloud samula
 */
public class WebserviceInvokeException extends BaseException {

    // 固定WebService异常模块名，便于日志/监控区分异常类型
    private static final String WS_MODULE = "webservice";


    /**
     * 仅异常消息（无错误码、无异常根源）
     * 调用父类：BaseException(String module, String defaultMessage)
     */
    public WebserviceInvokeException(String message) {
        super(WS_MODULE, message);
    }


    /**
     * 错误码 + 异常消息（无异常根源）
     * 调用父类：BaseException(String module, String code, Object[] args, String defaultMessage)
     * args传null：无错误码占位参数时使用
     */
    public WebserviceInvokeException(String code, String message) {
        super(WS_MODULE, code, null, message);
    }


    /**
     * 错误码 + 异常消息 + 异常根源（含cause，完整异常链）
     * 调用父类新增构造：BaseException(String module, String code, Object[] args, String defaultMessage, Throwable cause)
     * args传null：无错误码占位参数时使用
     */
    public WebserviceInvokeException(String code, String message, Throwable cause) {
        super(WS_MODULE, code, null, message, cause);
    }


    /**
     * 异常消息 + 异常根源（无错误码，含cause）
     * 调用父类新增构造：BaseException(String module, String defaultMessage, Throwable cause)
     */
    public WebserviceInvokeException(String message, Throwable cause) {
        super(WS_MODULE, message, cause);
    }


    /**
     * 扩展：错误码 + 占位参数 + 异常消息 + 异常根源（含参数化错误码）
     * 调用父类新增构造：BaseException(String module, String code, Object[] args, String defaultMessage, Throwable cause)
     * 场景：错误码需替换占位符时使用（如 "参数{0}无效"，args传["userId"]）
     */
    public WebserviceInvokeException(String code, Object[] args, String message, Throwable cause) {
        super(WS_MODULE, code, args, message, cause);
    }
}